<?php
	require_once("AGen.class.php");
	class A extends AGen{
	/*
		Classe A - Version 0.2
		Auteur : Loïc "MetalFox" PARRA
		Classe de création d'une balise <a> optimisée pour le référencement.
		
		README :
		Hérite de la classe AGen. La classe A permet la création d'une balise <a> optimisée pour le réferencement (calcul des follow/nofollow automatique) et pour la navigation (les liens externes s'ouvrent automatiquement dans un nouvel onglet).
		
		SUCRE SYNTAXIQUE :
		Idem que pour la classe A.
		
		CHANGELOG :
		0.0 : Création de la classe.
		0.1 : Remodélisation complete, renommage en A.
		0.2 : Ajout de la possibilité d'attribuer une classe au lien.
	*/
		
		function A($texte,$lien,$title='',$class=''){
			/* 
				Constructeur de la balise A.
				@param $texte : texte cliquable.
				@param $lien : lien vers lequel la balise mène (attribut href).
				@param $title : texte s'affichant dans l'infobulle (attribut title).
				@param $class : classe à donner au lien.
				@return N/A.
			*/
			if($this->externalLink($lien)){
				parent::__construct($texte,$lien,$title,true,false,$class);
			}
			else
			{
				parent::__construct($texte,$lien,$title,false,$this->manageFollow($lien),$class);
			}
		}
		
		function manageFollow($lien){
			/*
				Fonction permattant de calculer s'il faut utiliser "follow" ou "no-follow"
				@param $lien : le lien vers lequel la balise doit pointer.
				@return : vrai si on a besoin d'un follow, faux sinon.
			*/
			return !$this->backInTree($lien);
		}
		
		function backInTree($lien){
			/*
				Fonction permattant de chercher si le lien passé en parametre pointe sur un niveau plus haut dans l'arborescence.
				@param $lien : le lien vers lequel la balise doit pointer.
				@return : vrai si le lien remonte effectivement l'arborescence, faux sinon.
				
				TODO : Explode de la string par les slashes, car la, www.bla.fr/articles?id=3 et www.bla.fr/articles?id=36 subissent un nofollow
			*/
			return strstr("http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'],$lien);
		}
		
		function trueLink($link){
			/*
				Retourne le nom du serveur du lien, privé des http:// et du reste de l'arborescence.
				@param $lien : le lien vers lequel la balise doit pointer.
				@return : le vrai nom du serveur.
			*/
			$link = str_replace("http://",'',$link);
			if($trueLink = strstr($link,'/',true)){ return $trueLink; }else{ return $link;}
		}
		
		function externalLink($lien){
			/*
				Fonction permettant de déterminer si le lien pointe sur une autre page du même site, ou vers un site externe.
				@param $lien : le lien vers lequel la balise doit pointer.
				@return : vrai si le lien pointe sur un site externe, faux sinon.
			*/
			return $this->trueLink($lien) != $_SERVER['SERVER_NAME'] && $lien != '#';
		}
	}
?>